package tech.aistar.controller;

import tech.aistar.entity.User;
import tech.aistar.service.IUserService;
import tech.aistar.service.impl.UserServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;

/**
 * @Author: lya 控制层
 * @Description: 本类的作用描述:接受登录视图的servlet中的提交的数据
 * @CreateDate: 2019/9/5
 * @Version: 1.0
 */
@WebServlet(value = "/user/login")
public class LoginClAction extends HttpServlet {
    private IUserService userService = new UserServiceImpl();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //处理中文乱码问题
        req.setCharacterEncoding("utf-8");

        //根据请求的参数名称来获取请求的参数
        String username = req.getParameter("username");

        //System.out.println("uesername:"+username);

        String password = req.getParameter("password");

        //System.out.println("password:"+password);

        //模拟的数据中的用户
        //控制层 调用 service层 调用 mapper层

        User user = userService.findByUsername(username);

        //User user = new User(1,"admin","admin",1);

        //User user = null;//模拟的查不到数据

        //User user = xxx.getByUsername(uesername);
        if (user!=null){
            //用户存在
            if (user.getPassword().equals(password)){
                String flag = req.getParameter("flag");//默认值是on - 勾选
                if(flag!=null){
                    //将用户名和密码保存到cookie - 发送到客户端
                    username = URLEncoder.encode(URLEncoder.encode(username,"utf-8"),"utf-8");

                    Cookie c = new Cookie("userLogin",username+":"+password);

                    //设置cookie的生命周期
                    c.setMaxAge(24*60*60*7);//一周免登陆

                    //设置path - 必须要设置
                    c.setPath("/");

                    //通过响应头信息将cookie返回给客户端
                    resp.addCookie(c);
                }else{
                    Cookie c = new Cookie("userLogin","");
                    c.setPath("/");
                    resp.addCookie(c);
                }

                //成功跳转
                req.getSession().setAttribute("user",user);
                resp.sendRedirect(req.getContextPath()+"/phone/index");
                //首页 - 展示什么信息??? -  后天数据库的

                //①handlet数据的servlet - 负责调用后台数据
                //会findAll() - 获取所有的数据 - request作用域 - 转发到下面的视图的servlet

                //②视图的servlet - 负责输出页面 - [html]

                //考虑究竟是先执行①还是先执行②,关心这个视图的数据书是否有来自以数据库的
                //只要有来自数据库的那么必然先执行①

                //首页   1  iphonx  1230   修改超链接
                //探讨超链接整个生态的跳转.

                //localhost:8888/servlet  /phone/findById?id=1
                //① - handler的servlet - /phone/findById
                //   - Phone p = xxx.findById(1);
                //   - 放入到request作用域中,然后进行转发

                //② - 视图的servlet - /phone/updateView
                //   - 从作用域中获取Phone p = req.getAttribute("phone");
                //   - 打印表单input type='text' value='"+p.getName()+"'

                //③ - 提交更新按钮 - form的action="/user/update"
                //   - handler - 数据的servlet - 接受更新页面的所有的数据
                //   - 调用更新的方法
                //   - 重定向

                //④ - handler - servlet - 先从数据库库中获取所有的信息 - request作用域 - 转发
                //⑤ - 视图servlet - 首页
            }else{
                //密码错误 - 跳转到/user/loginView
                //推荐推荐使用重定向
                resp.sendRedirect(""+req.getContextPath()+"/user/loginView?error=1");
            }
        }else{
            //用户是不存在的! /user/loginView
            resp.sendRedirect(""+req.getContextPath()+"/user/loginView?error=0");
        }
    }
}
